package cn.findviewbydream.evil.app.dao;

import cn.findviewbydream.evil.main.entity.BaseSeatEntity;
import cn.findviewbydream.evil.main.entity.MealEntity;
import cn.findviewbydream.evil.main.entity.OrderEntity;
import cn.findviewbydream.evil.main.entity.OrderItemEntity;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.Date;
import java.util.List;

/********************************************
 * 工程名：MealOrder
 * 包名：cn.findviewbydream.evil.app.dao
 * 时间：16-12-28
 * 作者：白雨濃 evil
 * 邮箱：evilbai@foxmail.com
 * 内容：
 ********************************************/
@Repository
public interface OrderDAO
{
    List<BaseSeatEntity> selectSeatList();

    BaseSeatEntity selectSeatById(int seatId);

    MealEntity selectMealById(int mealId);

    MealEntity selectMealByIdWithIdName(int mealId);

    /**
     * 根据orderId查询OrderEntity
     */
    OrderEntity selectOrderByOrderId(int orderId);

    /**
     * 查询未完成订单列表
     */
    List<OrderEntity> selectUnFinishOrderList();

    /**
     * 查询已完成订单列表
     *
     * @param start 开始日期
     * @param end   结束日期
     */
    List<OrderEntity> selectFinishOrderList(@Param("start") Date start, @Param("end") Date end);

    /**
     * 通过orderId查询OrderItem列表
     */
    List<OrderItemEntity> selectOrderItemListByOrderId(int orderId);

    /**
     * 删除订单项目OrderItem
     */
    int deleteOrderItem(int orderItemId);

    /**
     * 更新订单项目中的数量和钱数
     *
     * @param orderItemId id
     * @param mealNum     数量
     * @param mealTotal   总价格
     * @return 更新行数
     */
    int updateOrderItemMealNum(@Param("orderItemId") int orderItemId,
                               @Param("mealNum") int mealNum,
                               @Param("mealTotal") int mealTotal);

    /**
     * 更新订单总价格
     *
     * @param orderId id
     * @param total   总价格
     */
    int updateOrderTotal(@Param("orderId") int orderId, @Param("total") int total);


    /**
     * 更新整个订单实体OrderEntity
     */
    int updateOrderEntity(OrderEntity entity);


    /**
     * 更新订单项目状态
     */
    int updateOrderItemState(@Param("orderItemId") int orderItemId
            , @Param("state") int state);
}
